/* Uses a memory mapping to read a file. */

#include <string.h>
#include <syscall.h>
#include "tests/vm/sample.inc"
#include "tests/lib.h"
#include "tests/main.h"

void test_main(void)
{
    char *actual = (char *)0x10000000;
    int handle;
    mapid_t map;
    size_t i;

    CHECK((handle = open("sample.txt")) > 1, "open \"sample.txt\"");
    CHECK((map = mmap(handle, actual)) != MAP_FAILED, "mmap \"sample.txt\"");

    /* Check that data is correct. */
    if (memcmp(actual, sample, strlen(sample)))
        fail("read of mmap'd file reported bad data");

    /* Verify that data is followed by zeros. */
    for (i = strlen(sample); i < 4096; i++)
        if (actual[i] != 0)
            fail("byte %zu of mmap'd region has value %02hhx (should be 0)",
                 i, actual[i]);

    munmap(map);
    close(handle);
}
